'use strict';

// 1. 导入模块
const fs = require('fs');
const { sequelize } = require('../database');

// 2. 搜索models文件夹下所有的文件，并筛选出除index.js以外的所有js文件
function searchModel() {
    // 读取文件夹下所有的文件
    let files = fs.readdirSync(__dirname);
    // 筛选除index.js以外的所有js文件
    let filterFile = files.filter(item => {
        return item.endsWith('.js') && item !== 'index.js';
    });
    return filterFile;
}

// 3. 引入所有的模型到指定对象
function registerModel(filterFile) {
    let obj = {};

    filterFile.forEach(item => {
        // 获取js文件的文件名
        let key = item.substring(0, item.length - 3);
        // 导入具体的内容
        obj[key] = require(__dirname + '/' + item);
    });
    return obj;
}

// 4. 调用函数
let filterFile = searchModel();
let obj = registerModel(filterFile);

// 5. 给obj对象绑定sync方法
obj.sync = async () => {
    if (process.env === 'product') {
        console.log(`当前是生产环境，不能强制修改或删除数据表`);
    } else {
        return sequelize.sync({ force: true }); // force:true 创建表时，如果表存在，先删除，在重新创建
    }
}

// 6. 暴露
module.exports = obj;